package com.example.course.service;

import com.example.course.bean.Courses;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.course.dto.CourseDTO;
import com.example.course.dto.CourseQueryDTO;
import com.example.course.vo.CourseVO;

/**
 * @author Jasmine-drs
 * @description 针对表【courses(课程表)】的数据库操作Service
 * @createDate 2025-04-22 15:36:40
 */
public interface CoursesService extends IService<Courses> {

    /**
     * 获取课程列表，支持按条件查询和分页
     *
     * @param queryDTO 查询条件
     * @return 课程分页列表
     */
    Page<CourseVO> getCourseList(CourseQueryDTO queryDTO);

    /**
     * 添加课程，包含课程代码重复检查
     *
     * @param courseDTO 课程信息
     * @return 添加后的课程信息
     * @throws IllegalArgumentException 当课程代码已存在时抛出
     */
    CourseVO addCourse(CourseDTO courseDTO);

    /**
     * 更新课程信息
     *
     * @param id        课程ID
     * @param courseDTO 课程信息
     * @return 更新后的课程信息
     * @throws IllegalArgumentException 当课程不存在或课程代码已被其他课程使用时抛出
     */
    CourseVO updateCourse(Integer id, CourseDTO courseDTO);

    /**
     * 删除课程
     *
     * @param id 课程ID
     * @return 删除结果，true表示成功，false表示失败
     * @throws IllegalArgumentException 当课程不存在时抛出
     */
    boolean deleteCourse(Integer id);

    /**
     * 根据ID获取课程信息
     *
     * @param id 课程ID
     * @return 课程信息
     * @throws IllegalArgumentException 当课程不存在时抛出
     */
    CourseVO getCourseById(Integer id);

    /**
     * 判断用户是否为教师
     *
     * @param userId 用户ID
     * @return true为教师，false为学生
     */
    boolean isTeacher(Integer userId);
}
